//
//  LBStatus.swift
//  LBNewWeiBo
//
//  Created by bin on 15/11/1.
//  Copyright © 2015年 bin. All rights reserved.
//

import UIKit

class LBStatus: NSObject {

    //MARK: - 属性
    // 时间
    var created_at: String?
    // 字符串的微博ID
    var idstr: String?
    
    // 微博内容
    var text: String?
    
    // 微博来源
    var source: String?
    
    // 微博配图
    var pic_urls: [[String: AnyObject]]?
    
    // 用户模型
    var user: LBUser?
    
    //MARK: - 字典转模型
    init(dict:[String: AnyObject]) {
        super.init()
        
        setValuesForKeysWithDictionary(dict)
        
        print(dict)
    }
    
    // KVC每次赋值的时候都会调用这个方法
    /// 将嵌套模型转为自己的属性
    override func setValue(value: AnyObject?, forKey key: String) {
        
        // 拦截用户属性字典
        if key == "user" {
            if let dict = value as? [String: AnyObject] {
                
                // 将用户数据字典转模型
                user = LBUser(dict: dict)
                return
            }
        } 
        
        return super.setValue(value, forKey: key)
    }
    
    // 字典的key在模型里找不到属性可以屏蔽
   override func setValue(value: AnyObject?, forUndefinedKey key: String) {}
    
    /// 打印输出成员属性
    override var description: String {
        //        "access_token:\(access_token), expires_in:\(expires_in), uid:\(uid): expires_date:\(expires_date), name:\(name), avatar_large:\(avatar_large)"
        
        let p = ["created_at", "idstr", "text", "source", "pic_urls", "user"]
        // 数组里面的每个元素,找到对应的value,拼接成字典
        // \n 换行, \t table
        return "\n\t微博模型:\(dictionaryWithValuesForKeys(p))"
    }
    
    //MARK: - 加载模型数据
    /// 闭包：模型对象
    class func loadStatus(finished: (statuses: [LBStatus]?, error: NSError?) -> ()) {
        // 调用网络工具内
        LBNetworkTools.sharedInstance.loadStatus { (result, error) -> () in
            // 加载模型数据出错
            if error != nil {
                print("error:\(error)")
                // 通知调用者错误
                finished(statuses: nil, error: error)
                return
            }
            
            // 数据加载通道--判断
            if let array = result?["statuses"] as? [[String: AnyObject]] {
                
                // 创建模型数组
                var statuses = [LBStatus]()
                
                // 字典转模型，添加到可变数组
                for dict in array {
                    statuses.append(LBStatus(dict: dict))
                }
                
                // 转换模型之后。传递调用者：闭包
                finished(statuses: statuses, error: nil)
            } else {
              // 没有数据
                finished(statuses: nil, error: nil)
            }
            
        }
        
        
    }
    
    
}
